package com.mastercard.assets.web.struts.forms ;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblSubcateg;
import com.mastercard.assets.jpa.TblUsuario;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.util.to.MultipleDataTO;
import com.mastercard.assets.web.util.to.UserLogin;

public class FormasAgregarForm
	extends
		FormasForm
{
	private String nombre ;
	private String descripcion ;
	private String[ ] nombreSalidas ;
	private String[ ] descripcionSalidas ;
	private List< MultipleDataTO > salidas ;
	private FormFile archivoForma ;
        private int cveAsset ;

	public List<MultipleDataTO> getSalidas() {
		return salidas;
	}

	public FormFile getArchivoForma() {
		return archivoForma;
	}

	public void setArchivoForma(FormFile archivoForma) {
		this.archivoForma = archivoForma;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String[] getNombreSalidas() {
		return nombreSalidas;
	}

	public void setNombreSalidas(String[] nombreSalidas) {
		this.nombreSalidas = nombreSalidas;
	}

	public String[] getDescripcionSalidas() {
		return descripcionSalidas;
	}

	public void setDescripcionSalidas(String[] descripcionSalidas) {
		this.descripcionSalidas = descripcionSalidas;
	}
        
        public int getCveAsset() {
            return cveAsset;
        }

        public void setCveAsset(int cveAsset) {
            this.cveAsset = cveAsset;
        }

	public ActionErrors validate( ActionMapping mapping , HttpServletRequest request )
	{
		ActionErrors errors = new ActionErrors( ) ;
		
		// en caso de vacios
		if( nombre == null || nombre.trim( ).length( ) == 0 )
			errors.add( "NombreEmpty" , new ActionMessage( "com.mastercard.assets.web.modules.forms.add.errors.NombreEmpty" ) ) ;
		
		if( descripcion == null || descripcion.trim( ).length( ) == 0 )
			descripcion = "" ;
		
		System.out.println( "NombreSalidas: " + nombreSalidas ) ;
		System.out.println( "DescripcionSalidas: " + descripcionSalidas ) ;
		
		if( nombreSalidas == null || nombreSalidas.length == 0 )
		{
			nombreSalidas = new String[ 0 ] ;
			errors.add( "NombreEmpty" , new ActionMessage( "com.mastercard.assets.web.modules.forms.add.errors.SalidasEmpty" ) ) ;
		}
		// en caso de que no esten vacios
		else
		{
			System.out.println( "Tamanio: " + nombreSalidas.length ) ;
			// revisa que no todos esten vacios
			boolean vaciosTodos = true ;
			
			// recorre los nombres para ver si estan vacios
			for( String nombre : nombreSalidas )
				// en caso de que uno este no vacio
				if( nombre != null && nombre.trim( ).length( ) > 0 )
				{
					vaciosTodos = false ;
					
					break ;
				}
			
			// en caso de que esten todos vacios
			if( vaciosTodos )
				errors.add( "SalidasTodasVacias" , new ActionMessage( "com.mastercard.assets.web.modules.forms.add.errors.SalidasAllEmpty" ) ) ;
			
			if( errors.size( ) == 0 )
			{
				// recorre los nombres para ver si hay repetidos
				for( int i = 0 ; i < nombreSalidas.length ; i++ )
				{
					// recorre desde el siguiente al final
					for( int j = i + 1 ; j < nombreSalidas.length ; j++ )
					{
						if( nombreSalidas[ i ].equals( nombreSalidas[ j ] ) )
						{
							// agrega error
							errors.add( "SalidasRepetidas" , new ActionMessage( "com.mastercard.assets.web.modules.forms.add.errors.SalidasRepetidas" ) ) ;
							
							break ;
						}
						
						if( errors.size( ) > 0 )
							break ;
					}
				}
			}
		}
		
		if( descripcionSalidas == null || descripcionSalidas.length == 0 )
		{
			descripcionSalidas = new String[ 0 ] ;
		}
		
		// revisa el archivo
		if( archivoForma == null || archivoForma.getFileName( ) == null || archivoForma.getFileName( ).trim( ).length( ) == 0 )
			errors.add( "FileEmpty" , new ActionMessage( "com.mastercard.assets.web.modules.forms.add.errors.FileEmpty" ) ) ;
		
		// en caso de no haber errores
		if( errors.size( ) == 0 )
		{
			// inicia las salidas
			salidas = new ArrayList< MultipleDataTO >( ) ;
			
			// recorre los nombres
			for( int i = 0 ; i < nombreSalidas.length ; i++ )
			{
				// lo agrega a las salidas
				if( descripcionSalidas.length > i )
					salidas.add( new MultipleDataTO( nombreSalidas[ i ] , ( ( descripcionSalidas[ i ] == null || descripcionSalidas[ i ].trim( ).length( ) == 0 ) ? "" : descripcionSalidas[ i ] ) ) ) ;
				else
					salidas.add( new MultipleDataTO( nombreSalidas[ i ] , "" ) ) ;
			}
		}
		
		return errors ;
	}
        
}
